The following is an excerpt from the Introduction to the American National Standard for Information Technology—Fibre Channel Protocol for SCSI (FCP), Fourth Version (FCP-4), approved Oct. 12, 2011, INCITS 481-2011, which is incorporated by reference herein in its entirety for all purposes.                The Small Computer System Interface (SCSI) command set is widely used and applicable to a wide variety of device types. The transmission of SCSI command set information across Fibre Channel links allows the large body of SCSI application and driver software to be successfully used in the high performance Fibre Channel environment.        This standard describes the protocol for transmitting SCSI commands, data, and status using Fibre Channel FC-FS-3 Exchanges and Information Units. Fibre Channel is a high-speed serial architecture that allows either optical or electrical connections. The topologies supported by Fibre Channel include point-to-point, fabric switched, and arbitrated loop. All Fibre Channel connections use the same standard frame format and standard hierarchy of transmission units to transmit the Information Units that carry SCSI information.        
The American National Standard for Information Technology—Fibre Channel Framing and Signaling (FC-FS-3), approved Dec. 28, 2011, INCITS 470-2011, is also incorporated by reference herein in its entirety for all purposes.
A conventional SCSI write command according to the FCP standard involves the following steps, which are described in more detail below. First, a FCP initiator sends a SCSI write command to a FCP target encapsulated in a FCP command frame. The target responds with a transfer ready message, which is a data delivery request, in which the target indicates to the initiator the amount of buffer space available to receive the write data. The initiator responds by sending the amount of data the target indicated it could receive. The target then sends another transfer ready message again indicating the amount of buffer space available and the initiator sends more data. This back and forth process repeats until all the data has been transferred and the target returns status to the initiator to complete the command. Due to current limitations of the FCP standard that will now be described, the initiator must effectively wait to send the data until it has received the relevant transfer ready message, and the target must wait to send (all but the first of) the transfer ready messages until it has received the data associated with the previous transfer ready message. This increases the latency of the FCP write I/O operation.
The FCP defines an Exchange as the basic mechanism that transfers information consisting of one or more related non-concurrent Sequences that may flow in the same or opposite directions. The Exchange is identified by an Originator Exchange_ID (OX_ID) and a Responder Exchange_ID (RX_ID). The FCP defines a Sequence as set of one or more data frames with a common Sequence_ID (SEQ_ID), transmitted unidirectionally from one N_Port to another N_Port with a corresponding response, if applicable, transmitted in response to each data frame. Thus, an Exchange between a FCP initiator port and a FCP target port may be viewed as a half duplex operation. That is, the Sequences within an Exchange can be transferred in only one direction at a time between. The port that is authorized to send a Sequence in a given point in time is referred to as holding the Sequence Initiative. In a typical FCP write I/O operation, the initiator transfers the Sequence Initiative to the target in the last data frame of the Sequence. The target responds with the transfer ready message, which transfers the Sequence Initiative back to the initiator so it can send more data frames (or the status frame). Thus, a half duplex handshaking occurs via the passing back and forth of the Sequence Initiative.
The FCP defines an Information Unit (IU) as an organized collection of data specified by the Fibre Channel Protocol to be transferred as a single Sequence by the Fibre Channel service interface. The FCP standard maps a SCSI I/O operation, such as a SCSI I/O write operation, into a single Fibre Channel Exchange, which means the IUs are transferred between the initiator and target in non-concurrent Sequences, that is, in a half duplex manner, as described above. Thus in the above example, while the data IU is being transferred from the initiator to the target, the target is not permitted to send another transfer ready IU to the initiator to notify the initiator of additional buffer space until the initiator transfers the Sequence Initiative to the target, even though the buffer space may have become available in the target well before the initiator transfers the Sequence Initiative to the target. Consequently, there is latency introduced into the FCP write I/O operation because of the half-duplex nature of the single Exchange in which the target and initiator perform the write I/O operation.
More specifically, there are multiple components of the latency introduced by the half-duplex nature of a single Exchange. First, there is the transmission time to transmit from the initiator to the target over the FC fabric the data frame that transfers the Sequence Initiative from the initiator to the target. The transmission time includes transmission medium delay (e.g., copper wire or fiber optic cable propagation delay) as well as any delay introduced by switches in the FC fabric along the path between the target and initiator. Second, there is the target processing time from when the target receives the Sequence Initiative-transferring data frame until it transmits the transfer ready IU, which transfers Sequence Initiative back to the initiator. The processing time is taken by the target hardware and/or firmware to process the Sequence Initiative-transferring data frame to determine that the target now has the Sequence Initiative to transmit the transfer ready IU. Third, there is the transmission time to transmit the transfer ready IU from the target to the initiator over the FC fabric. Fourth, there is the initiator processing time from when the initiator receives the Sequence Initiative-transferring transfer ready IU until it transmits the first data frame of the next Sequence. This is time taken by the initiator hardware and/or firmware to process the Sequence Initiative-transferring transfer ready IU.
The sum of these latencies introduced by the half-duplex nature of the single Exchange in which the target and initiator perform the write I/O operation has been observed to be on the order of tens of microseconds in some cases, which may significantly reduce performance of the system. Where the target is a mechanical hard disk drive, tape drive or other peripheral device having a relatively large access time (e.g., rotation latency and/or seek times on the order or milliseconds), the half-duplex Exchange-induced latency may have been small relative to the peripheral access time when viewing the entire write I/O operation time. However, with the advent of new low access time peripherals, such as solid-state disks (SSDs), and considering cases of high peripheral cache hit rates, the half-duplex Exchange-induced latency has become even more significant. Furthermore, longer cable distances through the FC fabric between the target and initiator may exacerbate the latency, particularly the transmission times, as may longer paths through the FC fabric, e.g., due to larger number of switch hops. Finally, large I/O write sizes may further exacerbate the latency, particularly in cases in which a relatively large number of transfer ready IUs must be sent in a given Exchange.